package cn.itcast.bos.web.action;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;

import javax.ws.rs.core.MediaType;

import org.apache.commons.io.FileUtils;
import org.apache.cxf.jaxrs.client.WebClient;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;

import cn.itcast.bos.domain.page.PageBean;
import cn.itcast.bos.domain.take_delivery.Promotion;
import freemarker.template.Configuration;
import freemarker.template.Template;

@SuppressWarnings("all")
@ParentPackage("json-default")
@Namespace("/")
@Controller
@Scope("prototype")
public class PromotionAction extends BaseAction<Promotion>{
    
//	分页
	@SuppressWarnings("unchecked")
	@Action(value="promotion_pageQuery",results={@Result(name="success",type="json")})
	public String pageQuery(){
		//基于webService  获取bos_management的活动列表 数据信息
		PageBean<Promotion> pageBean = WebClient.
	 create("http://localhost:9001/bos_management/services/promotionService/pageQuery?page="+page+"&rows="+rows)
				.accept(MediaType.APPLICATION_JSON).get(PageBean.class);
		System.out.println("获取输信息"+pageBean);
		//压入值栈
		ActionContext.getContext().getValueStack().push(pageBean);
		return SUCCESS;
	} 
   
	
	@Action(value="promotion_showDetail")
	public String showDetail() throws Exception{
		//获取文件夹的路径
		String htmlrealPath = ServletActionContext.getServletContext().getRealPath("/freemarker");
		File htmlFile = new File(htmlrealPath+"/"+model.getId()+".html");
		//如果不存在  查询数据库 结合freemarker模板生成页面
		if(!htmlFile.exists()){
		  	//获取模板对象
			Configuration configuration = new Configuration(Configuration.VERSION_2_3_22);
			configuration.setDirectoryForTemplateLoading(new File(ServletActionContext.getServletContext().
					getRealPath("/WEB-INF/freemarker_templates")));
			//获取模板对象
			Template template = configuration.getTemplate("promotion_detail.ftl");
			//动态数据
			 Promotion promotion  = WebClient.
			 create("http://localhost:9001/bos_management/services/promotionService/promotion/"+model.getId())
			 .accept(MediaType.APPLICATION_JSON).get(Promotion.class);
		    Map<String, Object> map = new HashMap<>();
		    System.out.println("是放松放松："+promotion.getTitleImg());
		    map.put("promotion", promotion);
		    
		    //合并输出    这里并不是以流的形式返回前台， 而是指定输出流的字符集编码格式 生成HTML代码静态野蛮存放到指定的文件夹下
		    //以流的形式响应回前台是用response().getOutputStream()
		    //freeMarker是如何将生成的HTML文件存到指定的文件夹下的 就是通过process方法把数据对象和模板文件合成静态HTML文件  
		    //再放到htmlFile文件所在的文件夹  页面的显示肯定是从这个文件夹中拿已经缓存的好的HTML静态页面  response().getOutputStream()必须执行
		    template.process(map, new OutputStreamWriter(new FileOutputStream(htmlFile),"utf-8"));
		    
		}
		//存在就将文件返回 不管第一次访问还是已经缓存好的html静态页面 都是从下面额代码通过输出流的形式response写回前台
		ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");
		FileUtils.copyFile(htmlFile, ServletActionContext.getResponse().getOutputStream());
		
		
		return NONE;
	}
}
